package br.com.sebrae.pr.sgp.util.exceptions.messages;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import br.com.sebrae.pr.sgp.util.PropertyUtil;
import br.com.sebrae.pr.sgp.util.exceptions.ExcecaoDeInfraEstrutura;

/**
 * Classe para obtenção de valores do arquivo de properties de erro da aplicação
 * (mensagensDeErro.properties).
 * 
 * @author Tanaka
 */
public class PropertyUtilMensagensErro {
	
	private static final Logger log = Logger.getLogger(PropertyUtil.class);
	
	private static Properties properties = null;

	/**
	 * Obtém determinada propriedade. O locale é definido em
	 * {@link LocaleUtil#getLocale()}
	 * 
	 * @param property
	 * @return
	 */
	public static String getProperty(final String property) {
		if (StringUtils.isBlank(property)) {
			return null;
		}
		if (getProperties() == null) {
			return property;
		}

		final String retorno = getProperties().getProperty(property);

		if (StringUtils.isBlank(retorno)) {
			log.error("Propriedade não encontrada no arquivo mensagensDeErro.properties. Propriedade: '" + property + "'.");
		}

		return retorno; // new String(retorno.getBytes("ISO-8859-1"), "UTF-8");
	}
	
	private static Properties getProperties() {
		if (properties == null || properties.isEmpty()) {
			InputStream is = null;
			try {
				properties = new Properties();
				is = PropertyUtilMensagensErro.class.getClassLoader().getResourceAsStream("mensagensDeErro.properties");
				properties.load(is);

			} catch (Exception ex) {
				throw new ExcecaoDeInfraEstrutura(ex);

			} finally {
				if (is != null) {
					try {
						is.close();
					} catch (IOException e) {
						log.error("Erro fechando inputStream do mensagensDeErro.properties", e);
					}
				}
			}
		}

		return properties;
	}
}
